package com.lvy.hczn.front.business.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.lvy.hczn.front.business.dto.Param;
import com.lvy.hczn.front.system.domain.business.GoodsBox;
import com.lvy.hczn.front.system.domain.business.GoodsBoxDetail;
import com.lvy.hczn.front.system.domain.business.SpuSortRecord;
import com.lvy.hczn.front.system.domain.business.UpOrDownPolicy;

import java.util.List;

public interface GoodsBoxService extends IService<GoodsBox> {

    /**
     * 分拣下架,获取货箱及详情
     *
     * @param spuId
     * @return
     * @author yw
     * @date 2022-04-17 14:01:42
     */
    GoodsBox sortByClient(String spuId) throws Exception;

    /**
     * 获取货箱信息，包含详情
     *
     * @param boxCode
     * @return
     * @author yw
     * @date 2022-04-19 21:51:14
     */
    GoodsBox selectIncDetailByBoxCode(String boxCode) throws Exception;

    /**
     * 调拨配送校验货箱
     *
     * @param param
     * @return
     * @author yw
     * @date 2022-05-07 14:42:21
     */
    GoodsBox sortByBoxCode(Param param) throws Exception;

    /**
     * 根据货箱编号查空箱
     *
     * @param param
     * @return
     * @author yw
     * @date 2022-05-07 14:42:21
     */
    GoodsBox selectEmptyBoxByBoxCode(Param param) throws Exception;

    /**
     * 根据货箱编号急状态查询
     *
     * @param boxCode
     * @param status
     * @return
     */
    GoodsBox selectByBoxCodeAndStatus(String boxCode, String status) throws Exception;

    /**
     * 合并货箱，出库下个货箱
     *
     * @param clientId
     * @throws Exception
     */
    void downloadMergeBox(String clientId) throws Exception;

    /**
     * 销售退货入库下架货箱
     *
     * @param clientId
     * @throws Exception
     */
    void downloadReturnBox(String clientId) throws Exception;

    /**
     * 临期报损出库下架货箱
     *
     * @param clientId
     * @throws Exception
     */
    void downloadFrmLossBox(String clientId) throws Exception;

    /**
     * 空箱或指定货箱出库
     *
     * @param param
     * @return com.lvy.hczn.common.core.util.ResultUtil
     * @author yw
     * @date 2022-07-29 15:52:12
     */
    void downloadEmptyBox(Param param);

    /**
     * 调拨分拣完成货箱信息列表
     *
     * @param goodsBox
     * @return
     * @author yw
     * @date 2023-08-20 16:10:18
     */
    List<GoodsBox> selectTransferSortDoneByOutBoundOrderCode(GoodsBox goodsBox);

    /**
     * 临期报损查询货箱
     *
     * @param spuSortRecord
     * @return
     */
    List<GoodsBox> selectFrmLossList(SpuSortRecord spuSortRecord);

    /**
     * 查询货箱信息列表
     *
     * @param goodsBox 货箱信息
     * @return 货箱信息
     */
    List<GoodsBox> selectBoxlist(GoodsBox goodsBox);

    /**
     * 新增货箱信息
     *
     * @param goodsBox 货箱信息
     * @return 结果
     */
    int insertGoodsBox(GoodsBox goodsBox);

    /**
     * 修改货箱信息
     *
     * @param goodsBox 货箱信息
     * @return 结果
     */
    int updateGoodsBox(GoodsBox goodsBox);

    /**
     * 批量删除货箱信息
     *
     * @param ids 需要删除的货箱信息主键集合
     * @return 结果
     */
    int deleteGoodsBoxByIds(String ids);

    /**
     * 删除货箱信息信息
     *
     * @param id 货箱信息主键
     * @return 结果
     */
    int deleteGoodsBoxById(String id);

    /**
     * @Description 新货箱称重同步到数据转发中心
     * @Param [goodsBox]
     * @Author yw
     * @Date 2024/4/26 9:56
     * @Return void
     **/
    void netWeightSyncToPlatform(GoodsBox goodsBox) throws Exception;

    /**
     * 分拣称重完成，则检查货箱商品重量是否为空箱,为空箱，则进行库位调整同步到平台
     *
     * @param boxCode
     * @return
     * @author yw
     * @date 2022-04-19 21:51:14
     */
    void checkShelfLocation(String boxCode) throws Exception;

    /**
     * @Description 离开缓存位后获取货箱数据
     * @Param
     * @Author yw
     * @Date 2024/6/22 15:40
     * @Return
     **/
    GoodsBox getGoodsBoxByKey(UpOrDownPolicy upOrDownPolicy);
}
